package domain;


import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;


import exceptions.BenutzernameOderPasswordFalschException;
import exceptions.BierExistiertBereitsException;
import exceptions.BierNichtGefundenException;
import exceptions.KundeExistiertBereitsException;

import UI.KundenClientUI;
import UI.MitarbeiterClientUI;
import valueobjects.*;

public class ShopVerwaltung {
	
	private String datei = "";
	private Verwaltung Vt;
	private KundenVerwaltung kundenVt;
	private MitarbeiterVerwaltung mitarbeiterVt;
	private Artikel artikel;
	private WarenkorbVerwaltung wkVt;
	public ShopVerwaltung(String datei) throws IOException {
		
		this.datei = datei;
		
		Vt = new Verwaltung();
		mitarbeiterVt = new MitarbeiterVerwaltung();
		kundenVt = new KundenVerwaltung();
		artikel = new Artikel(datei, datei, 0, 0);
		wkVt = new WarenkorbVerwaltung();
		Vt.liesDaten(datei+"_Shop.txt");
		mitarbeiterVt.liesDaten("Mitarbeiter_Liste.txt");
		kundenVt.liesDaten("Kunden_Liste.txt");
		
	}
	
	

	
	//Mitarbeiter- und KundenZone
	
	public void mitarbeiterZone() throws Exception{
        
        boolean logInOk = false;
        
        try{
        do{
                logInOk = mitarbeiterVt.mitarbeiterLogin();
                if(logInOk){
                        MitarbeiterClientUI m = new MitarbeiterClientUI("Artikel");
                        m.mClRun();
                }       
                else{
                        System.out.println("Benutzername oder Passwort ist falsch!");
                }
                        
        }while(!logInOk);
        }catch(Exception e){
        	e.printStackTrace();
        }
        
}

	

    public void kundenZone() throws Exception{

        boolean logInOk = false;
        
        try{
        do{
                logInOk = kundenVt.kundenLog();
                if(logInOk){
                        KundenClientUI k = new KundenClientUI("Artikel");                                
                        k.kClRun();
                }       
                else{
                        System.out.println("Benutzername oder Passwort ist falsch!");
                }
                
        }while(!logInOk);
        }catch(Exception e){
                e.printStackTrace();
        }
        
}

	
	
	//Daten zuruckgeben
	
	public Vector<Artikel> gibAlleArtikel(){
		
		return Vt.getArtikel();
		
	}
	
	
	public Vector<Mitarbeiter> gibAlleMitarbeiter() {
		
		return mitarbeiterVt.getMitarbeiter();
		
	}
	
	
	public Vector<Kunde> gibAlleKunden() {
		
		return kundenVt.getKunde();
		
	}
	
	public Vector<Warenkorb> gibwkaus(){
		
		return wkVt.gibwkaus();
	}
	
	
	//Daten schreiben
	
	public void schreibeArtikel() throws IOException {
		
		Vt.schreibeDaten(datei+"_Shop.txt");
		
	}	
	public void schreibeKunde() throws IOException {
		  
		kundenVt.schreibeKunde("Kunden_Liste.txt");
	}
	

	public void schreibeLogFile(String s) throws IOException {
		
		if(s.equals("m")){
			mitarbeiterVt.schreibeMitLogFile("Mitarbeiter_Log.txt");
			
		}
		else if (s.equals("k")){
			kundenVt.schreibeKunLogFile("Kunden_Log.txt");
		}
		
	}
	
	
	//ShopVerwaltung
	
	public Artikel sucheArtikel(String artikelName) throws BierNichtGefundenException {
		Artikel artikel = null;
//		try {
			artikel = Vt.suchEinArtikel(artikelName);
//		} catch (BierNichtGefundenException e) {
//			e.printStackTrace();
//			return null;
//		}
		return artikel;
	}
	
	
	public Vector
	<Artikel> sucheArtikelNachName (String artikelName) throws BierNichtGefundenException{
		
		Vector<Artikel> ergebnisArtikelName = new Vector();
		try{
			ergebnisArtikelName = Vt.sucheArtikelNachName(artikelName);
		}catch (BierNichtGefundenException e){
			e.printStackTrace();
			System.out.println("Produkt nicht gefunden!!");
			return null;
		}
		return ergebnisArtikelName;
		
	}
	
	
	public boolean fuegeArtikelEin(String artikelID, String artikelName, float artikelPreis, int artikelMenge) throws BierExistiertBereitsException {
		
		Artikel a = new Artikel(artikelID, artikelName, artikelPreis, artikelMenge);
		try {
			Vt.einfuegen(a);
			mitarbeiterVt.addLogFile(a, "f");
		} catch (BierExistiertBereitsException e) {
			return false;
		}
		return true;
	}
	
	//Warenkorb
	public void legeInWarenkorb(String id, String kunde, Artikel artikel, int menge) throws IOException{
		Warenkorb wk = new Warenkorb(id, kunde, artikel, menge);
			wkVt.inWarenkorb(wk);
		
	}
	
	
	
	public boolean artikelLoeschen(Artikel a) {
		try{
			Vt.loeschenBier(a);
			mitarbeiterVt.addLogFile(a, "l");
		}catch(BierNichtGefundenException e){
			e.printStackTrace();
			return false;
		}
			return true;
	}
	
	
	public void nachArtikelIDSortieren() throws IOException {
		
		boolean ok = Vt.nachIDSortieren();
		if(ok){
				schreibeArtikel();	
		}
		else{
				System.out.println("Error beim Sortieren");
			}
	}
	
	
	public void setArtikelMenge(Artikel suchArtikel, int i) {
		
		suchArtikel.setMenge(i);
		mitarbeiterVt.addLogFile(suchArtikel, "m");
	}
	
	
	public void setArtikelMenge(Vector<KaufeArtikel> warenkorb) throws Exception{
		
		Iterator iter = warenkorb.iterator();
		while(iter.hasNext()){
			KaufeArtikel kArtikel = (KaufeArtikel)iter.next();
			Artikel a = sucheArtikel(kArtikel.getName());
			a.setMenge(a.getMenge()- kArtikel.getMenge());
			
		}
	}
	
	
	public boolean setArtikelMengeNachEinkauf(Vector<KaufeArtikel> warenkorb) throws Exception {
		
		Vt.mengeNachEinkauf(warenkorb);
		kundenVt.addKunLogFile(warenkorb);
		
		return true;
		
	}
	
	

	



	//Kunde-Verwaltung)
	
	public boolean fuegeKundeEin(String benutzername, String password, String email, String vorname, String nachname, String strUndHausnummer, String ort, int plz)  throws IOException {
	
		Kunde k = new Kunde(benutzername, password, email, vorname, nachname, strUndHausnummer, ort, plz);
		try{
			kundenVt.einfuegen(k);
		}catch(KundeExistiertBereitsException e){
			return false;
		}
		return true;
	}


	public Kunde kundenLogin(String user, String pwd) throws BenutzernameOderPasswordFalschException{
		return kundenVt.kundenLogin(user, pwd);
	} 

	public Mitarbeiter mitarbeiterLogin(String user, String pwd) throws BenutzernameOderPasswordFalschException {
		return mitarbeiterVt.mitarbeiterLogin(user, pwd);
	}
	public String getID(){
		String id = artikel.getID();
		return id;
	}
	
	
}

